package descubreperu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import descubreperu.excepcion.DAOExcepcion;
import descubreperu.excepcion.LoginExcepcion;
import descubreperu.modelo.Auspiciador;
import descubreperu.util.ConexionBD;

public class AuspiciadorDAO extends BaseDAO {
	
	//BUSCAR POR RUC
			public Collection<Auspiciador> buscarPorNombre(String nombre) throws DAOExcepcion {
				
				String query = "select auspiciador.* from auspiciador where auspiciador.ruc like ?";
				Collection<Auspiciador> c = new ArrayList<Auspiciador>();
				Connection con = null;
				PreparedStatement stmt = null;
				ResultSet rs = null;
				try {
					con = ConexionBD.obtenerConexion();
					stmt = con.prepareStatement(query);
					stmt.setString(1, "%" + nombre + "%");
					rs = stmt.executeQuery();
					while (rs.next()) {
						Auspiciador vo = new Auspiciador();
						vo.setId_auspiciador(rs.getInt("id_auspiciador"));				
						vo.setNombre(rs.getString("nombre"));
						vo.setRuc(rs.getString("ruc"));
						vo.setCategoria(rs.getString("categoria"));
						vo.setDireccion(rs.getString("direccion"));
						vo.setTelefono(rs.getString("telefono"));
						vo.setEmail(rs.getString("email"));
						vo.setWebsite(rs.getString("website"));
						
						c.add(vo);
					}
				} catch (SQLException e) {
					System.err.println(e.getMessage());
					throw new DAOExcepcion(e.getMessage());
				} finally {
					this.cerrarResultSet(rs);
					this.cerrarStatement(stmt);
					this.cerrarConexion(con);
				}
				return c;
				
			}
		
		//INSERTAR REGISTRO
		public void insertar(Auspiciador vo) throws DAOExcepcion {
			System.out.println("AuspiciadorDAO: insertar(Auspiciador vo)");
			System.out.println(vo.getNombre());
			String query = "INSERT INTO auspiciador(nombre, ruc, categoria, direccion, telefono, email, website, id_administrador) VALUES (?,?,?,?,?,?,?,?)";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				
				stmt.setString(1, vo.getNombre());
				stmt.setString(2, vo.getRuc());
				stmt.setString(3, vo.getCategoria());
				stmt.setString(4, vo.getDireccion());
				stmt.setString(5, vo.getTelefono());
				stmt.setString(6, vo.getEmail());
				stmt.setString(7, vo.getWebsite());
				stmt.setString(8, vo.getId_administrador());
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo insertar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}
		/*
		//VALIDAR LOGIN
			public Usuario validar(String usuario, String password)			
			
					throws DAOExcepcion, LoginExcepcion {
				String query = "select nombres, paterno,"
						+ "materno, usuario, password, fecha_nacimiento,"
						+ "documento, email, sexo from cliente where usuario=? and password=?";
				Connection con = null;
				PreparedStatement stmt = null;
				ResultSet rs = null;
				Usuario vo = new Usuario();
				try {
					con = ConexionBD.obtenerConexion();
					stmt = con.prepareStatement(query);
					stmt.setString(1, usuario);
					stmt.setString(2, password);
					rs = stmt.executeQuery();

					if (rs.next()) {				
						vo.setNombres(rs.getString("nombres"));
						vo.setPaterno(rs.getString("paterno"));
						vo.setMaterno(rs.getString("materno"));
						vo.setUsuario(rs.getString("usuario"));
						vo.setPassword(rs.getString("password"));
						vo.setFecha_nacimiento(rs.getString("fecha_nacimiento"));
						vo.setDocumento(rs.getString("documento"));
						vo.setCorreo(rs.getString("email"));
						vo.setSexo(rs.getString("sexo"));
					} else {
						throw new LoginExcepcion("No existe");
					}
				} catch (LoginExcepcion e) {
					System.err.println(e.getMessage());
					throw new LoginExcepcion(e.getMessage());
				} catch (SQLException e) {
					System.err.println(e.getMessage());
					throw new DAOExcepcion(e.getMessage());
				} finally {
					this.cerrarResultSet(rs);
					this.cerrarStatement(stmt);
					this.cerrarConexion(con);
				}
				return vo;
			}
		
		
*/
		//OBTENER
		public Auspiciador obtener(String ruc) throws DAOExcepcion {
			System.out.println("AuspiciadorDAO: obtener(String ruc)");
			Auspiciador vo = new Auspiciador();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				String query = "select nombre, ruc, categoria, direccion, telefono, email, website from auspiciador where ruc=?";
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, ruc);
				rs = stmt.executeQuery();
				if (rs.next()) {
					vo.setNombre(rs.getString(1));
					vo.setRuc(rs.getString(2));
					vo.setCategoria(rs.getString(3));
					vo.setDireccion(rs.getString(4));
					vo.setTelefono(rs.getString(5));
					vo.setEmail(rs.getString(6));
					vo.setWebsite(rs.getString(7));
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}

		//ELIMINAR
		public void eliminar(String ruc) throws DAOExcepcion {
			System.out.println("AuspiciadorDAO: eliminar(String ruc)");
			String query = "DELETE FROM auspiciador WHERE ruc=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, ruc);
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo eliminar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}

		//ACTUALIZAR REGISTROS
		public Auspiciador actualizar(Auspiciador vo) throws DAOExcepcion {
			String query = "UPDATE auspiciador SET nombre=?, ruc=?, categoria=?, direccion=?, telefono=?, email=?, website=? WHERE ruc=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);			
				stmt.setString(1, vo.getNombre());
				stmt.setString(2, vo.getRuc());
				stmt.setString(3, vo.getCategoria());
				stmt.setString(4, vo.getDireccion());
				stmt.setString(5, vo.getTelefono());
				stmt.setString(6, vo.getEmail());		
				stmt.setString(7, vo.getWebsite());
				stmt.setString(8, vo.getRuc());
				

				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo actualizar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}
		/*
		//LISTAR
		public Collection<Usuario> listar() throws DAOExcepcion {
			System.out.println("UsuarioDAO: listar()");
			Collection<Usuario> c = new ArrayList<Usuario>();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				con = ConexionBD.obtenerConexion();
				String query = "SELECT id_usuario,nombres,paterno,materno,usuario,password,correo,telefono,sexo,id_departamento from usuario";
				stmt = con.prepareStatement(query);
				rs = stmt.executeQuery();
				while (rs.next()) {
					Usuario vo = new Usuario();				
					vo.setNombres(rs.getString("nombres"));
					vo.setPaterno(rs.getString("paterno"));
					vo.setMaterno(rs.getString("materno"));
					vo.setUsuario(rs.getString("usuario"));
					vo.setPassword(rs.getString("password"));
					vo.setCorreo(rs.getString("correo"));
					vo.setTelefono(rs.getString("telefono"));
					vo.setSexo(rs.getString("sexo"));
					vo.setId_departamento(rs.getString("id_departamento"));
					c.add(vo);
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return c;
		}
		
		//VALIDAR LOGIN
		public Usuario validar(String usuario, String password)			
		
				throws DAOExcepcion, LoginExcepcion {
			String query = "select id_usuario, nombres, paterno,"
					+ "materno, usuario, password, correo,"
					+ "telefono, sexo, id_departamento from usuario where usuario=? and password=?";
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			Usuario vo = new Usuario();
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, usuario);
				stmt.setString(2, password);
				rs = stmt.executeQuery();

				if (rs.next()) {				
					vo.setNombres(rs.getString("nombres"));
					vo.setPaterno(rs.getString("paterno"));
					vo.setMaterno(rs.getString("materno"));
					vo.setUsuario(rs.getString("usuario"));
					vo.setPassword(rs.getString("password"));
					vo.setCorreo(rs.getString("correo"));
					vo.setTelefono(rs.getString("telefono"));
					vo.setSexo(rs.getString("sexo"));
					vo.setId_departamento(rs.getString("id_departamento"));
				} else {
					throw new LoginExcepcion("No existe");
				}
			} catch (LoginExcepcion e) {
				System.err.println(e.getMessage());
				throw new LoginExcepcion(e.getMessage());
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return vo;
		}*/
	
	

}
